package czolgisci.tiles.factory;

import java.awt.Point;
import java.io.IOException;

import czolgisci.tiles.ATile;
import czolgisci.tiles.TileType;

/**
 * @author pillow
 * @pattern
 *         <ul>
 *         <li>Fabryka Abstrakcyjna - Zapewnia interfejs umożliwiający
 *         tworzenie rodzin obiektów kafelkowych bez specyfikowania ich klas
 *         konkretnych.
 * 
 *         Podczas wykonywania programu tworzony jest jeden egzemplarz klasy konkretnej
 *         fabryki (np. StandardTileFactory). Ta fabryka konkretna tworzy kafelki o
 *         pewnej szczególnej implementacji. Aby utworzyć inne kafelki, należy
 *         skorzystać z innej fabryki konkretnej.</li>
 *         
 *         <li>Singleton - tylko jedna instancja tej klasy jest dozwolona</li>
 *         <ul>
 * @version 1.0
 */
public interface ITileFactory
{
	/**
	 * Tworzy obiekt zadanego typu
	 * 
	 * @param type
	 *            typ obiektu do utworzenia (np. TileType.TANK)
	 * @param position
	 *            pozycja obiektu na mapie
	 * @return
	 * @throws IOException
	 */
	public ATile makeTile(TileType type, Point position) throws IOException;

	public int getTileWidth();
	
	public int getTileHeight();

}
